gh-143990: Preserve the size when creating a Font from a named font#153267
Merged
serhiy-storchaka merged 2 commits intoJul 8, 2026
Conversation
…font tkinter.font.Font now copies the options of a named font (via "font configure") instead of the options resolved by "font actual", which would resolve a size specified in pixels (a negative size) to points. A font description is still resolved, as it cannot be parsed otherwise. Font.copy(), which has always been equivalent to constructing a Font from the original font, is updated to match and now preserves the size too. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
987b4c2 to
ae1f4a7
Compare
|
Thanks @serhiy-storchaka for the PR 🌮🎉.. I'm working now to backport this PR to: 3.15. |
|
Sorry, @serhiy-storchaka, I could not cleanly backport this to |
|
GH-153323 is a backport of this pull request to the 3.15 branch. |
serhiy-storchaka
added a commit
to serhiy-storchaka/cpython
that referenced
this pull request
Jul 8, 2026
Drop the assertion in test_create_from_named_font that explicit options override the copied font settings: that behavior was added by pythonGH-152025 and is not in 3.15, where options are ignored when a font is specified. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
serhiy-storchaka
added a commit
that referenced
this pull request
Jul 8, 2026
… font (GH-153267) (GH-153323) tkinter.font.Font now copies the options of a named font (via "font configure") instead of the options resolved by "font actual", which would resolve a size specified in pixels (a negative size) to points. A font description is still resolved, as it cannot be parsed otherwise. Font.copy(), which has always been equivalent to constructing a Font from the original font, is updated to match and now preserves the size too. (cherry picked from commit 45010f4) Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
serhiy-storchaka
added a commit
that referenced
this pull request
Jul 8, 2026
… font (GH-153267) (GH-153323) (GH-153342) tkinter.font.Font now copies the options of a named font (via "font configure") instead of the options resolved by "font actual", which would resolve a size specified in pixels (a negative size) to points. A font description is still resolved, as it cannot be parsed otherwise. Font.copy(), which has always been equivalent to constructing a Font from the original font, is updated to match and now preserves the size too. (cherry picked from commit 45010f4) (cherry picked from commit a9d4473) Co-authored-by: Serhiy Storchaka <storchaka@gmail.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
serhiy-storchaka
added a commit
that referenced
this pull request
Jul 8, 2026
… font (GH-153267) (GH-153323) (GH-153341) tkinter.font.Font now copies the options of a named font (via "font configure") instead of the options resolved by "font actual", which would resolve a size specified in pixels (a negative size) to points. A font description is still resolved, as it cannot be parsed otherwise. Font.copy(), which has always been equivalent to constructing a Font from the original font, is updated to match and now preserves the size too. (cherry picked from commit 45010f4) (cherry picked from commit a9d4473) Co-authored-by: Serhiy Storchaka <storchaka@gmail.com> Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
When a
tkinter.font.Fontis created from another font,Font.__init__expanded it into concrete options with Tcl'sfont actual. For a named font this resolves the configured size, so a size specified in pixels (a negative size) was silently converted to a size in points (gh-143990).font configurereturns the configured options and preserves such a size, but it only accepts a font name, not a font description. So the font is now expanded withfont configurewhen it is a named font, falling back tofont actualwhen it is a font description:Trying
font configurefirst delegates the "is this a named font?" decision to Tcl, which is robust even for font names containing spaces.A font description (a tuple or a string) is still resolved via
font actual, since there is no way to parse it into options otherwise; wrapping it withexists=True(gh-143990, #152025) remains the way to use it without loss of precision.Font.copy()has always been equivalent to constructing aFontfrom the original font (both went throughfont actual), so it is updated to match and now preserves the size too.This is the general form of #143992, which restored the size only for a size given in a tuple.